iT邦幫忙

2024 iThome 鐵人賽

DAY 3
1
佛心分享-SideProject30

用 Golang 實作 streamlit 系列 第 3

Day3 介面的初步想法

  • 分享至 

  • xImage
  •  

Interface

在介面上,我們讓使用者可以註冊自己的 Script Function:

func main() {
	Run(func(root *Container, state *State) {
		...
    })
}

Container

  • Container 是構成介面的基本單位,就像是一個容器。
  • 你可以在 Container 上放置各種元件,例如文字、按鈕、輸入框等等。
  • Container 可以嵌套其他 Container,形成更複雜的介面結構。

State

  • State 用來儲存使用者在介面上輸入的資料,以及介面當前的狀態。
  • 舉例來說,當使用者在一個輸入框中輸入(unblur)文字時,這個文字就會被儲存到 State 中。
  • 介面元件可以根據 State 中的資料來回傳自己的數值。

Example

例如:假如我們要放置一行文字,可以這樣做:

Text(root, "Hello world")

讓使用者可以指定 Container 的好處是,當 Package 可以提供 Sub Container,例如 Tab,就可以這樣寫:

tab1, tab2 := Tab2(root, "creat options") // tab1 和 tab2 都是 *Container
Text(tab1, "hello tab1")
Text(tab2, "hello tab2")

State 則是來處理具有使用者 Input 的部分:

name := Textbox(root, state, "What's your name")
Text(root, "hello " + name)

實作層面基本上會是 state 維護一個 map ,會存 Client 傳過來的值, Textbox 函數會去拿他對應的 value 值,最後 Textbox 函數會回傳一個字串。

如此,就做到了互動。

再舉一個 Button 作為例子:

if Button(root, state, "Click") {
	Text(root, "Hello world")
}

Button 會去 state 的 map 裡面找 key "Click" 對應的 value ,然後回傳 bool: 這按鈕是否有被按。

比較特別的是,當 Script Function 跑完時,這個 Button 在 state 裡面的 map 所對應的值會被清除,因為按下這個操作,是暫時性的,不會保留給下次。


上一篇
Day2 Streamlit 的基本運作方式
下一篇
Day4 開始寫扣!
系列文
用 Golang 實作 streamlit 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言